package com.gong.gongcloudpicture1.exception;

import com.gong.gongcloudpicture1.common.BaseResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * 自定义注解拦截器
 */
// 这里需要一个环绕切面注解, 该注解可以在该类中写一些 切面 或者 切点
@RestControllerAdvice
// 日志输出注解
@Slf4j
public class GlobalExceptionHandler {


    /**
     * 创建一个自定义注解拦截 拦截自定义的业务异常
     * @param e
     * @return
     */
    //这里需要一个ExceptionHandler注解, 值就是自己创建的异常
    //加上这个注解后, 只要任何一个方法抛出了这个异常, 那么这个拦截器就会通过环绕切面来捕获到这个异常, 然后就可以处理这个异常
    @ExceptionHandler(BusinessException.class)
    public BaseResponse<?> BusinessExceptionHandler(BusinessException e) {
        log.error("businessException", e);
        return BaseResponse.error(e.getCode(), e.getMessage());
    }


    /**
     * 捕获一个系统异常
     * @param e
     * @return
     */
    @ExceptionHandler(RuntimeException.class)
    public BaseResponse<?> BusinessExceptionHandler(RuntimeException e) {
        log.error("runtimeException", e);
        return BaseResponse.error(ErrorCode.SYSTEM_ERROR, "系统错误");
    }


}
